home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / PROGMISC / FORTRAN1.LZH / ISORT.FOR < prev    next >
Text File  |  1988-02-08  |  3KB  |  106 lines

  1.       SUBROUTINE ISORT ( ARRAY, NUM, INDX )
  2. C*
  3. C*                  *******************************
  4. C*                  *******************************
  5. C*                  **                           **
  6. C*                  **           ISORT           **
  7. C*                  **                           **
  8. C*                  *******************************
  9. C*                  *******************************
  10. C*
  11. C*     SUBPROGRAM :
  12. C*          SORT ARRAY - THE INPUT ARRAY IS SORTED AS WELL AS THE ARRAY
  13. C*                       'INDX'. THEREFORE, INDX CAN BE USED TO PRINT
  14. C*                       ANY NUMBER OF RELATED ARRAYS.
  15. C*
  16. C*     AUTHOR :
  17. C*          ART RAGOSTA
  18. C*          MS 207-5
  19. C*          AMES RESEARCH CENTER
  20. C*          MOFFETT FIELD, CALIF 94035
  21. C*          (415)694-5578
  22. C*
  23. C*     PURPOSE :
  24. C*          PRODUCE A SORTED INDEX POINTER ARRAY
  25. C*
  26. C*     METHODOLOGY :
  27. C*          SHELLSORT
  28. C*
  29. C*     INPUT ARGUMENTS :
  30. C*          NUM    - NUMBER OF ELEMENTS IN ARRAY
  31. C*          ARRAY  - ARRAY TO BE SORTED
  32. C*
  33. C*     OUTPUT ARGUMENTS :
  34. C*          INDX   - INDEX ARRAY
  35. C*
  36. C*     INTERNAL WORK AREAS :
  37. C*          TEMPA - USED DURING SWAPS
  38. C*
  39. C*     COMMON BLOCKS :
  40. C*          NONE
  41. C*
  42. C*     FILE REFERENCES :
  43. C*          NONE
  44. C*
  45. C*     DATA BASE ACCESS :
  46. C*          NONE
  47. C*
  48. C*     SUBPROGRAM REFERENCES :
  49. C*          NONE
  50. C*
  51. C*     ERROR PROCESSING :
  52. C*          NONE
  53. C*
  54. C*     TRANSPORTABILITY LIMITATIONS :
  55. C*          NONE
  56. C*
  57. C*     ASSUMPTIONS AND RESTRICTIONS :
  58. C*          THE TYPE OF THE ARRAY 'ARRAY' AND THE VARIABLE 'TEMPA'
  59. C*          MUST BE SET FOR EACH TYPE OF SORT.  FOR THIS PARTICULAR
  60. C*          IMPLEMENTATION, THE ARRAY IS CHARACTER WITH LENGTH <= 255.
  61. C*
  62. C*     LANGUAGE AND COMPILER :
  63. C*          ANSI FORTRAN 77
  64. C*
  65. C*     VERSION AND DATE :
  66. C*          VERSION I.0     MARCH 12, 1984
  67. C*
  68. C*     CHANGE HISTORY :
  69. C*          03/12/84     INITIAL VERSION
  70. C*
  71. C***********************************************************************
  72. C*
  73.       DIMENSION ARRAY(1), INDX(1)
  74.       CHARACTER *(*) ARRAY
  75.       CHARACTER *255 TEMPA
  76.       INTEGER TEMPI
  77.       LOGICAL DONE
  78. C
  79.       DO 10 I = 1, NUM
  80.          INDX(I) = I
  81. 10       CONTINUE
  82.       IF (NUM .LE. 1) RETURN
  83.       JUMP = NUM
  84. 20    JUMP = JUMP / 2
  85. 30    DONE = .TRUE.
  86.       NJ = NUM-JUMP
  87.       DO 40 J = 1, NJ
  88.          I = J + JUMP
  89.          IF (ARRAY(J) .GT. ARRAY(I))THEN
  90.             DONE = .FALSE.
  91.             TEMPA = ARRAY(J)
  92.             ARRAY(J) = ARRAY(I)
  93.             ARRAY(I) = TEMPA
  94.             TEMPI = INDX(J)
  95.             INDX(J) = INDX(I)
  96.             INDX(I) = TEMPI
  97.          ENDIF
  98. 40       CONTINUE
  99.       IF (.NOT. DONE) GO TO 30
  100.       IF (JUMP .GT. 1) GO TO 20
  101.       RETURN
  102.       END
  103. C
  104. C---END ISORT
  105. C
  106.